import java.util.Scanner;

/**
 * ClassName: WhileTest
 * Package: PACKAGE_NAME
 * Description:循环结构之一：while循环
 * 1. 凡是循环结构，就一定会有4个要素：
 * ① 初始化条件
 * ② 循环条件 ---> 一定是boolean类型的变量或表达式
 * ③ 循环体
 * ④ 迭代部分
 * 2.while的格式
 * ①
 * while(②){
 * ③
 * ④
 * }
 * 3.执行过程：① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
 * 4. for循环与while循环可以相互转换！
 * 5. for循环和while循环的小区别：初始化条件的作用域范围不同。while循环中的初始化条件在while循环结束后，依然有效。
 *
 * @Author 糕糕
 * @Create 2024-01-25 15:19
 * @Version 1.0
 */

class WhileTest {
    public static void main(String[] args) {

        //需求1：遍历50次HelloWorld
        int i = 1;
        while (i <= 50) {
            System.out.println("HelloWorld");
            i++;//一定要小心！不要丢了
        }

        //需求2：遍历1-100以内的偶数，并获取偶数的个数，获取所有的偶数的和
        int j = 1;

        int count = 0;//记录偶数的个数
        int sum = 0;//记录偶数的总和
        while (j <= 100) {
            if (j % 2 == 0) {
                System.out.println(j);
                count++;
                sum += j;
            }
            j++;
        }

        System.out.println("偶数的个数为：" + count);
        System.out.println("偶数的总和为：" + sum);
    }
}


/*
随机生成一个100以内的数，猜这个随机数是多少？

从键盘输入数，如果大了，提示大了；如果小了，提示小了；如果对了，就不再猜了，并统计一共猜了多少次。

提示：生成一个[a,b] 范围的随机数的方式：(int)(Math.random() * (b - a + 1) + a)
*/

class WhileTest1 {
    public static void main(String[] args) {

        //1. 生成一个[1,100]范围的随机整数
        int random = (int) (Math.random() * 100) + 1;

        //2. 使用Scanner，从键盘获取数据
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入1-100范围的一个整数：");
        int guess = scan.nextInt();

        //3.声明一个变量，记录猜的次数
        int guessCount = 1;

        //4. 使用循环结构，进行多次循环的对比和获取数据
        while (random != guess) {

            if (guess > random) {
                System.out.println("你输入的数据大了");
            } else if (guess < random) {
                System.out.println("你输入的数据小了");
            }//else{
            //	break;
            //}

            System.out.print("请输入1-100范围的一个整数：");
            guess = scan.nextInt();
            guessCount++;

        }

        //能结束结束，就意味着random和guess相等了
        System.out.println("恭喜你！猜对了！");
        System.out.println("共猜了" + guessCount + "次");


        scan.close();

    }
}


/*
世界最高山峰是珠穆朗玛峰，它的高度是8848.86米，假如我有一张足够大的纸，它的厚度是0.1毫米。
请问，我折叠多少次，可以折成珠穆朗玛峰的高度?

*/
class WhileTest2 {
    public static void main(String[] args) {

        //1. 声明珠峰的高度、纸的默认厚度
        double paper = 0.1;//单位：毫米
        double zf = 8848860;//单位：毫米


        //2. 定义一个变量，记录折纸的次数
        int count = 0;


        //3. 通过循环结构，不断调整纸的厚度 （当纸的厚度超过珠峰高度时，停止循环）
        while (paper <= zf) {

            paper *= 2;
            count++;

        }

        System.out.println("paper的高度为:" + (paper / 1000) + ",超过了珠峰的高度" + (zf / 1000));
        System.out.println("共折纸" + count + "次");


    }
}
